{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 问题：请解释或描述一下 Django 的架构\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "面试官想从这道题中考察面试人什么？\n",
    "理解一个框架的架构可以帮助理解这个框架的运作方式。\n",
    "\n",
    "答案\n",
    "Django 是遵循 MVC 架构的 Web 开发框架，但我们也可以把它描述成 MVT 的架构，因为其主要由以下几部分组成。\n",
    "\n",
    "模型层（Model）：提供数据访问接口和模块，包括数据字段、元数据、数据关系等的定义及操作；\n",
    "视图层（View）：Django 的视图层封装了 HTTP Request 和 Response 的一系列操作和数据流，负责处理用户的请求并返回响应。其主要功能包括 URL 映射机制、绑定模板等；\n",
    "模板层（Template）：是一套 Django 自己的页面渲染模板语言，用若干内置的 tags 和 filters 定义页面的生成方式。它提供了一个对设计者友好的语法用于渲染向用户呈现的信息。\n",
    "\n",
    "MVC：Model-View-Controller\n",
    "MVT：Model-View-Template\n",
    "\n",
    "另外，Django 框架还提供了其它一些组件：\n",
    "表单（Form）：通过内置的数据类型和控件生成 HTML 表单。\n",
    "管理站（Admin）：通过声明需要管理的 Model，快速生成后台数据管理网站。\n",
    "管理工具（Management）：一套内置的创建站点、迁移数据、维护静态文件的命令工具。\n",
    "\n",
    "拓展\n",
    "我们先看看 Django 被设计出来要解决的问题主要有哪些：\n",
    "\n",
    "数据专家需要一个通用界面去使用不同的数据源，格式和数据库软件；\n",
    "设计团队需要能够使用他们已经拥有的工具（HTML，CSS，JavaScript 等）来管理用户体验；\n",
    "核心编码人员需要一个框架，使他们能够在系统内快速部署更改，从而使每个人都满意。\n",
    "那么，这个框架就必须集数据，设计和业务逻辑于一体，且能够独立工作。Django 的架构也由此而生。\n",
    "\n",
    "图片描述\n",
    "\n",
    "第 1 部分：是一组工具，这些工具使处理数据和数据库更加容易，即上图中的模型部分；\n",
    "\n",
    "第 2 部分：是非程序员可以使用的纯文本模板系统，即上图中的模板部分；\n",
    "\n",
    "第 3 部分：是一个框架，即虚线部分，这部分处理用户与数据库之间的通信，并使许多管理复杂网站的痛苦过程自动化。Django 框架封装了模型，视图逻辑和业务逻辑。Django 框架除了响应用户输入并与数据交互外，还可以做更多的事情。Django 中间件就是这种额外功能的完美示例，它位于视图和客户端之间。 Django 的中间件会在将响应发送到浏览器之前执行关键的安全性和身份验证检查，是 Django 请求 / 响应处理的钩子框架。每个中间件组件负责做一些特定的功能。\n",
    "\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
